home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows News 2010 Summer - Disc 1
/
WN_Ete2010_CD1.iso
/
Onglet5
/
Weezo
/
Weezo setup.exe
/
{code_appDir}
/
www
/
includes
/
twitter.lib.php
< prev
next >
Wrap
PHP Script
|
2010-05-19
|
21KB
|
588 lines
<?php
/*
* Copyright (c) <2008> Justin Poliey <jdp34@njit.edu>
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
/**
* Twitterlibphp is a PHP implementation of the Twitter API, allowing you
* to take advantage of it from within your PHP applications.
*
* @author Justin Poliey <jdp34@njit.edu>
* @package twitterlibphp
*/
/**
* Twitter API abstract class
* @package twitterlibphp
*/
abstract class TwitterBase {
/**
* the last HTTP status code returned
* @access private
* @var integer
*/
private $http_status;
/**
* the whole URL of the last API call
* @access private
* @var string
*/
private $last_api_call;
/**
* the application calling the API
* @access private
* @var string
*/
private $application_source;
/**
* Returns the 20 most recent statuses from non-protected users who have set a custom user icon.
* @param string $format Return format
* @return string
*/
function getPublicTimeline($format = 'xml') {
return $this->apiCall('statuses/public_timeline', 'get', $format, array(), false);
}
/**
* Returns the 20 most recent statuses posted by the authenticating user and that user's friends.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function getFriendsTimeline($options = array(), $format = 'xml') {
return $this->apiCall('statuses/friends_timeline', 'get', $format, $options);
}
/**
* Returns the 20 most recent statuses posted from the authenticating user.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function getUserTimeline($options = array(), $format = 'xml') {
return $this->apiCall('statuses/user_timeline', 'get', $format, $options, true);
}
/**
* Returns the 20 most recent mentions (status containing @username) for the authenticating user.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function getMentions($options = array(), $format = 'xml') {
return $this->apiCall("statuses/mentions", 'get', $format, $options);
}
/**
* Returns the 20 most recent @replies (status updates prefixed with @username) for the authenticating user.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
* @deprecated
*/
function getReplies($options = array(), $format = 'xml') {
return $this->apiCall('statuses/replies', 'get', $format, $options);
}
/**
* Returns a single status, specified by the $id parameter.
* @param string|integer $id The numerical ID of the status to retrieve
* @param string $format Return format
* @return string
*/
function getStatus($id, $format = 'xml') {
return $this->apiCall("statuses/show/{$id}", 'get', $format, array(), false);
}
/**
* Updates the authenticated user's status.
* @param string $status Text of the status, no URL encoding necessary
* @param string|integer $reply_to ID of the status to reply to. Optional
* @param string $format Return format
* @return string
*/
function updateStatus($status, $reply_to = null, $format = 'xml') {
$options = array('status' => $status);
if ($reply_to) {
$options['in_reply_to_status_id'] = $reply_to;
}
return $this->apiCall('statuses/update', 'post', $format, $options);
}
/**
* Destroys the status specified by the required ID parameter. The authenticating user must be the author of the specified status.
* @param integer|string $id ID of the status to destroy
* @param string $format Return format
* @return string
*/
function destroyStatus($id, $format = 'xml') {
return $this->apiCall("statuses/destroy/{id}", 'post', $format, $options);
}
/**
* Returns the authenticating user's friends, each with current status inline.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function getFriends($options = array(), $format = 'xml') {
return $this->apiCall('statuses/friends', 'get', $format, $options, false);
}
/**
* Returns the authenticating user's followers, each with current status inline.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function getFollowers($options = array(), $format = 'xml') {
return $this->apiCall('statuses/followers', 'get', $format, $options);
}
/**
* Returns extended information of a given user.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function showUser($options = array(), $format = 'xml') {
if (!array_key_exists('id', $options) && !array_key_exists('user_id', $options) && !array_key_exists('screen_name', $options)) {
$options['id'] = substr($this->credentials, 0, strpos($this->credentials, ':'));
}
return $this->apiCall('users/show', 'get', $format, $options, false);
}
/**
* Returns a list of the 20 most recent direct messages sent to the authenticating user.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function getMessages($options = array(), $format = 'xml') {
return $this->apiCall('direct_messages', 'get', $format, $options);
}
/**
* Returns a list of the 20 most recent direct messages sent by the authenticating user.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function getSentMessages($options = array(), $format = 'xml') {
return $this->apiCall('direct_messages/sent', 'get', $format, $options);
}
/**
* Sends a new direct message to the specified user from the authenticating user.
* @param string $user The ID or screen name of a recipient
* @param string $text The message to send
* @param string $format Return format
* @return string
*/
function newMessage($user, $text, $format = 'xml') {
$options = array(
'user' => $user,
'text' => $text
);
return $this->apiCall('direct_messages/new', 'post', $format, $options);
}
/**
* Destroys the direct message specified in the required $id parameter.
* @param integer|string $id The ID of the direct message to destroy
* @param string $format Return format
* @return string
*/
function destroyMessage($id, $format = 'xml') {
return $this->apiCall("direct_messages/destroy/{$id}", 'post', $format, $options);
}
/**
* Befriends the user specified in the ID parameter as the authenticating user.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function createFriendship($options = array(), $format = 'xml') {
if (!array_key_exists('follow', $options)) {
$options['follow'] = 'true';
}
return $this->apiCall('friendships/create', 'post', $format, $options);
}
/**
* Discontinues friendship with the user specified in the ID parameter as the authenticating user.
* @param integer|string $id The ID or screen name of the user to unfriend
* @param string $format Return format
* @return string
*/
function destroyFriendship($id, $format = 'xml') {
$options = array('id' => $id);
return $this->apiCall('friendships/destroy', 'post', $format, $options);
}
/**
* Tests if a friendship exists between two users.
* @param integer|string $user_a The ID or screen name of the first user
* @param integer|string $user_b The ID or screen name of the second user
* @param string $format Return format
* @return string
*/
function friendshipExists($user_a, $user_b, $format = 'xml') {
$options = array(
'user_a' => $user_a,
'user_b' => $user_b
);
return $this->apiCall('friendships/exists', 'get', $format, $options);
}
/**
* Returns an array of numeric IDs for every user the specified user is followed by.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function getFriendIDs($options = array(), $format = 'xml') {
return $this->apiCall('friends/ids', 'get', $format, $options);
}
/**
* Returns an array of numeric IDs for every user the specified user is following.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function getFollowerIDs($options = array(), $format = 'xml') {
return $this->apiCall('followers/ids', 'get', $format, $options);
}
/**
* Returns an HTTP 200 OK response code and a representation of the requesting user if authentication was successful; returns a 401 status code and an error message if not.
* @param string $format Return format
* @return string
*/
function verifyCredentials($format = 'xml') {
return $this->apiCall('account/verify_credentials', 'get', $format, array());
}
/**
* Returns the remaining number of API requests available to the requesting user before the API limit is reached for the current hour.
* @param boolean $authenticate Authenticate before calling method
* @param string $format Return format
* @return string
*/
function rateLimitStatus($authenticate = false, $format = 'xml') {
return $this->apiCall('account/rate_limit_status', 'get', $format, array(), $authenticate);
}
/**
* Ends the session of the authenticating user, returning a null cookie.
* @param string $format Return format
* @return string
*/
function endSession($format = 'xml') {
return $this->apiCall('account/end_session', 'post', $format, array());
}
/**
* Sets which device Twitter delivers updates to for the authenticating user.
* @param string $device The delivery device used. Must be sms, im, or none
* @return string
*/
function updateDeliveryDevice($device, $format = 'xml') {
$options = array('device' => $device);
return $this->apiCall('account/update_delivery_device', 'post', $format, $options);
}
/**
* Sets one or more hex values that control the color scheme of the authenticating user's profile page on twitter.com.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function updateProfileColors($options, $format = 'xml') {
return $this->apiCall('account/update_profile_colors', 'post', $format, $options);
}
/**
* Sets values that users are able to set under the "Account" tab of their settings page.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function updateProfile($options, $format = 'xml') {
return $this->apiCall('account/update_profile', 'post', $format, array());
}
/**
* Returns the 20 most recent favorite statuses for the authenticating user or user specified by the ID parameter in the requested format.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function getFavorites($options = array(), $format = 'xml') {
return $this->apiCall('favorites', 'get', $format, $options);
}
/**
* Favorites the status specified in the ID parameter as the authenticating user.
* @param integer|string $id The ID of the status to favorite
* @param string $format Return format
* @return string
*/
function createFavorite($id, $format = 'xml') {
return $this->apiCall("favorites/create/{$id}", 'post', $format, array());
}
/**
* Un-favorites the status specified in the ID parameter as the authenticating user.
* @param integer|string $id The ID of the status to un-favorite
* @param string $format Return format
* @return string
*/
function destroyFavorite($id, $format = 'xml') {
return $this->apiCall("favorites/destroy/{$id}", 'post', $format, array());
}
/**
* Enables notifications for updates from the specified user to the authenticating user.
* @param integer|string $id The ID or screen name of the user to follow
* @param string $format Return format
* @return string
*/
function follow($id, $format = 'xml') {
$options = array('id' => $id);
return $this->apiCall('notifications/follow', 'post', $format, $options);
}
/**
* Disables notifications for updates from the specified user to the authenticating user.
* @param integer|string $id The ID or screen name of the user to leave
* @param string $format Return format
* @return string
*/
function leave($id, $format = 'xml') {
$options = array('id' => $id);
return $this->apiCall('notifications/leave', 'post', $format, $options);
}
/**
* Blocks the user specified in the ID parameter as the authenticating user.
* @param integer|string $id The ID or screen name of the user to block
* @param string $format Return format
* @return string
*/
function createBlock($id, $format = 'xml') {
$options = array('id' => $id);
return $this->apiCall('blocks/create', 'post', $format, $options);
}
/**
* Unblocks the user specified in the ID parameter as the authenticating user.
* @param integer|string $id The ID or screen name of the user to unblock
* @param string $format Return format
* @return string
*/
function destroyBlock($id, $format = 'xml') {
$options = array('id' => $id);
return $this->apiCall('blocks/destroy', 'post', $format, $options);
}
/**
* Returns if the authenticating user is blocking a target user.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function blockExists($options, $format = 'xml') {
return $this->apiCall('blocks/exists', 'get', $format, $options);
}
/**
* Returns an array of user objects that the authenticating user is blocking.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function getBlocking($options, $format = 'xml') {
return $this->apiCall('blocks/blocking', 'get', $format, $options);
}
/**
* Returns an array of numeric user ids the authenticating user is blocking.
* @param array $options Options to pass to the method
* @param string $format Return format
* @return string
*/
function getBlockingIDs($format = 'xml') {
return $this->apiCall('blocks/blocking/ids', 'get', $format, array());
}
/**
* Returns the string "ok" in the requested format with a 200 OK HTTP status code.
* @param string $format Return format
* @return string
*/
function test($format = 'xml') {
return $this->apiCall('help/test', 'get', $format, array(), false);
}
/**
* Returns the last HTTP status code
* @return integer
*/
function lastStatusCode() {
return $this->http_status;
}
/**
* Returns the URL of the last API call
* @return string
*/
function lastApiCall() {
return $this->last_api_call;
}
}
/**
* Access to the Twitter API through HTTP auth
* @package twitterlibphp
*/
class Twitter extends TwitterBase {
/**
* the Twitter credentials in HTTP format, username:password
* @access private
* @var string
*/
var $credentials;
/**
* Fills in the credentials {@link $credentials} and the application source {@link $application_source}.
* @param string $username Twitter username
* @param string $password Twitter password
* @param $source string Optional. Name of the application using the API
*/
function __construct($username, $password, $source = null) {
$this->credentials = sprintf("%s:%s", $username, $password);
$this->application_source = $source;
}
protected function apiCall($twitter_method, $http_method, $format, $options, $require_credentials = true) {
$curl_handle = curl_init();
$api_url = sprintf('http://twitter.com/%s.%s', $twitter_method, $format);
if (($http_method == 'get') && (count($options) > 0)) {
$api_url .= '?' . http_build_query($options);
}
//echo $api_url . "\n";
curl_setopt($curl_handle, CURLOPT_URL, $api_url);
if ($require_credentials) {
curl_setopt($curl_handle, CURLOPT_USERPWD, $this->credentials);
}
if ($http_method == 'post') {
curl_setopt($curl_handle, CURLOPT_POST, true);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, http_build_query($options));
}
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array('Expect:'));
// Proxy settings
if(cfGGetVar('proxyEnabled')) {
curl_setopt($curl_handle, CURLOPT_PROXY, cfGGetVar('proxyIP'));
curl_setopt($curl_handle, CURLOPT_PROXYPORT, cfGGetVar('proxyPort'));
if(cfGGetVar('proxyUsername')) curl_setopt($curl_handle, CURLOPT_PROXYUSERPWD, cfGGetVar('proxyUsername').':'.cfGGetVar('proxyPassword'));
}
$twitter_data = curl_exec($curl_handle);
$this->http_status = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
$this->last_api_call = $api_url;
curl_close($curl_handle);
return $twitter_data;
}
}
/**
* @desc Retreive twitter configuration (account, password, displayed IP address)
*
* @return array(account, password,displayedIP)
*/
function twitterGetConnectionData(){
if(!($data=cfGGetVar('twitterData'))) return array(false,false,false);
else{
$clear=cfStoredPasswordDecrypt($data);
if(strpos($clear,'|')===false) return array(false,false,false);
return explode('|',$clear);
}
}
/**
* @desc Set account and password
*
* @param string $account
* @param string $password
* @param boolean $displayedIP
*/
function twitterSaveConnectionData($account,$password,$displayIP){
if(!$account||!$password) return cfServerSendCommand('changeParameter name="twitterData" value=""');
if($displayIP && $displayIP!=='false') $displayIP='1'; else $displayIP='0';
cfGUpdateVar('twitterData',cfStoredPasswordCrypt($account.'|'.$password.'|'.$displayIP));
}
/**
* @desc Check if a given account/pwd is valid
*
* @param string $account
* @param string $password
* @return bool
*/
function twitterCheck($account=false,$password=false, &$tooManyCnx=null){
if(!$account) @list($account,$password,$displayedIP)=twitterGetConnectionData();
if(!$account) return false;
$twitter=new Twitter($account,$password,'Weezo');
$res=($twitter->verifyCredentials());
$tooManyCnx=(strpos($res,'oo many')!==false);
return strpos($twitter->verifyCredentials(),'<error>')===false;
}
/**
* @desc Post a message to configured account
*
* @param $message: message to post
* @return boolean result
*/
function twitterPost($message){
@list($account,$password,$displayIP)=twitterGetConnectionData();
if(!$account) return false;
$twitter=new Twitter($account,$password,'Weezo');
$res=$twitter->updateStatus($message);
return $res;
}
?>